﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CalculadoraDeMatrizes
{
    public partial class Form1 : Form
    {
        MatrizBase matrizBase;
        Gerador gerador;
        public Form1()
        {
            InitializeComponent();

            gerador = Gerador.getInstance();
            gerador.Gerador_ComboBox(CBMatriz);
        }

        private void BTTCriarMatriz_Click(object sender, EventArgs e)
        {
            int matrizParaAdicionar;

            try
            {
                matrizParaAdicionar = gerador.Gerador_TextBox(CBMatriz.Text, Convert.ToInt32(CB_Matriz1_1.Text), Convert.ToInt32(CB_Matriz1_2.Text)
                                            , Convert.ToInt32(CB_Matriz2_1.Text), Convert.ToInt32(CB_Matriz2_2.Text));
            }
            catch (FormatException) { MessageBox.Show("Algum número está em formato incorreto.","Formatação Errada"); matrizParaAdicionar = -1; }

            if (matrizParaAdicionar == 1)
            {
                //Adicionar as Textbox 2x2.
                AdicionarTextBox(gerador.getMatriz1(), Convert.ToInt32(CB_Matriz1_1.Text), Convert.ToInt32(CB_Matriz1_2.Text));
                AdicionarTextBox(gerador.getMatriz2(), Convert.ToInt32(CB_Matriz2_1.Text), Convert.ToInt32(CB_Matriz2_2.Text));
                AdicionarTextBox(gerador.getMatriz3(), Gerador.getInstance().getMatriz3().GetLength(0), Gerador.getInstance().getMatriz3().GetLength(1));

                //Ativar o botão invisível.
                BTTCalcularMatriz.Visible = true;
                return;
            }
            else if (matrizParaAdicionar == 2)
            {
                //Adicionar as Textbox 2x2.
                AdicionarTextBox(gerador.getMatriz1(), Gerador.getInstance().getMatriz1().GetLength(0), Gerador.getInstance().getMatriz1().GetLength(1));

                //Ativar o botão invisível.
                BTTCalcularMatriz.Visible = true;
                return;
            }
            else if (matrizParaAdicionar == 3)
            {
                //Adicionar as Textbox 2x2.
                AdicionarTextBox(gerador.getMatriz1(), Gerador.getInstance().getMatriz1().GetLength(0), Gerador.getInstance().getMatriz1().GetLength(1));
                AdicionarTextBox(gerador.getMatriz3(), Gerador.getInstance().getMatriz3().GetLength(0), Gerador.getInstance().getMatriz3().GetLength(1));

                //Ativar o botão invisível.
                BTTCalcularMatriz.Visible = true;
                return;
            }

            //Se o usuário apagar o texto, deixar o botão novamente invisível.
            BTTCalcularMatriz.Visible = false;
        }

        private void AdicionarTextBox(TextBox[,] tb, int tamanhoX, int tamanhoY)
        {
            //Adicionar no Forms os TextBox.
            for (int x = 0; x < tamanhoX; x++)
            {
                for (int y = 0; y < tamanhoY; y++)
                    Controls.Add(tb[x, y]);
            }
        }

        private void BTTCalcularMatriz_Click(object sender, EventArgs e)
        {
            matrizBase = MatrizBase.SetarMatriz(CBMatriz.Text, matrizBase);

            //Atualizar o forms
            Invalidate();
        }
    }
}